<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta name="generator" content="Fog Creek CityDesk 2.0.27" />
<meta name="citydesk" content="AF0A0761/35" />
<title>Bindable LINQ - Bindable LINQ Concepts</title>
	<style type="text/css">
	body {
		background-color: #fff;
		font: 10pt segoe UI, arial, tahoma, arial, sans-serif;
	}

	h1 {
		font: bold 18pt "Cambria","Segoe UI",Arial;
		margin: 0px;
	}
	h2 {
		font-size: 12pt;
		font-weight: bold;
	}
	h3 {
		font-size: 11pt;
		font-weight: bold;
	}
	h4, h5 {
		font-size: 10pt;
		font-weight: bold;
	}
	
	#container
	{
		width: 90%;
		margin: 10px auto;
		background-color: #fff;
		color: #333;
		border: 1px solid #009900;
		line-height: 130%;
	}
	
	#top
	{
		padding: .5em;
		background-color: #F3F6EC;
		border-bottom: 1px solid #009900;
	}
	
	#top h1
	{
		padding: 0;
		margin: 0;
	}
	
	#leftnav
	{
		float: left;
		width: 250px;
		margin: 0;
		padding: 10px;
	}
	
	#content
	{
		margin-left: 300px;
		border-left: 1px solid #009900;
		padding: 10px;
	}
	
	#footer
	{
		clear: both;
		margin: 0;
		padding: .5em;
		color: #333;
		background-color: #F3F6EC;
		border-top: 1px solid #009900;
	}
	
	a 
	{
		color:#105CB6;
		text-decoration:underline;
	}
	
	#content p { line-height: 150%; }

	</style>
</head>
<body>

	<div id="container">
		<div id="top">
			<h1><a href="../../Index.html">Bindable LINQ</a></h1>
			<h2>Reactive Programming for the .NET Framework</h2>
		</div>
		
		<div id="leftnav">
			<p>
			<ul>
				<li><a href="../../Index.html">Introduction</a></li>
				<li><a href="../../1_QuickStarts/GettingStarted.html">Getting Started</a></li>
				<li><a href="../Overview.html">Design Concepts</a></li>
				<ul>
					<li><a href="../../2_DesignConcepts/BindableLINQOverview/Overview.html">Background</a></li>
					<ul>
						<li><a href="../../2_DesignConcepts/BindableLINQOverview/ReactiveProgramming.html">Reactive Programming</a></li>
						<li><a href="../../2_DesignConcepts/BindableLINQOverview/DataBinding.html">Data Binding</a></li>
						<li><a href="../../2_DesignConcepts/BindableLINQOverview/LINQ.html">LINQ</a></li>
					</ul>
				</ul>
				<ul>
					<li><a href="Overview.html">Bindable LINQ</a></li>
					<ul>
						<li><a href="Platforms.html">Platform Support</a></li>
						<li><a href="Dependencies.html">Query Dependencies</a></li>
						<li><a href="ListOfSupportedQueries.html">List of Supported LINQ Syntax</a></li>
						<li><a href="BindableLINQPatterns.html">Application Patterns</a></li>
					</ul>
				</ul>
				<li><a href="../../3_FAQ/FAQ.html">FAQ</a></li>
				<li><a href="../../4_QueryExamples/Overview.html">Examples</a></li>
				<li><a href="../../5_SampleApplications/Overview.html">Sample Applications</a></li>
				<li><a href="../../6_Implementation/Overview.html">Implementation</a></li>
				<li><a href="../../License.html">License</a></li>
			</ul>
			</p>
		</div>
	
		<div id="content">
	
			
			<div>
				<h1>Bindable LINQ Concepts</h1>
			</div>
			
		
			<p>Bindable LINQ is implemented as a set of .NET extension methods, each of which is described as being a seperate <em>query operator</em>. Since Bindable LINQ can be used hand-in-hand with LINQ to Objects and other LINQ query providers, even within the same file, an <strong>AsBindable</strong> extension method is used to tell the C# compiler that every LINQ operator coming after it should use Bindable LINQ extensions instead of LINQ to Objects.</p>
<pre>
var query = items.Where(c =&gt; c.FirstName == "Paul")                // Uses LINQ
var query = items.AsBindable().Where(c =&gt; c.FirstName == "Paul")   // Uses Bindable LINQ
</pre>
<p>Bindable LINQ query operators can be broadly broken into three categories:
</p>
<ol>
<li><strong>Iterators</strong><br />
Iterators are Bindable LINQ queries that transform a collection of items into another collection of items. Examples of such queries include <em>Select, Where, OrderBy, Distinct</em> and <em>UnionAll</em>.
</li>
<li><strong>Aggregators</strong><br />
Aggregators are Bindable LINQ queries which transform a collection of items into a singular item. Examples of such queries include <em>Min, Max, Count</em> and <em>First</em>.
</li>
<li><strong>Operators</strong><br />
Operators are Bindable LINQ queries which transform a singular item into another singular item. Examples of such queries include Switch, which is used for pattern matching (like the native C# <em>switch</em> statement, or the functional F# <em>match</em> operator), and Project (which turns one item into another, like a single-value <em>Select</em> statement).
</li>
</ol>
<p>All Bindable LINQ query extension methods are defined in the <em>BindableEnumerable</em> class in the <em>Bindable.Linq</em> namespace.</p>


<p>The following pages contain more information on Bindable LINQ:</p>
<ul>
<li><a href="Platforms.html">Platform Support</a>
</li>
<li><a href="Dependencies.html">Query Dependencies</a>
</li>
<li><a href="ListOfSupportedQueries.html">List of Supported LINQ Syntax</a>
</li>
<li><a href="BindableLINQPatterns.html">Application Patterns</a>
</li>
</ul>
		</div>
	
		<div id="footer">More Links</div>
	</div>
</body>
</html>
